﻿// Tischpreiskegeln
//
// vorgesehen für die FF Feichtenberg zur Unterstützung des alljährlich stattfindenen
// Tischpreiskegelns.
// 
// Autoren:
// Eder Philipp S0910438031
// Lutt Martin  S0910438076
// (FH Wels)
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace fff_preiskegeln
{
    public partial class frmmain : Form
    {
        /// <summary>
        /// Verbindungsdaten zur Datenbank
        /// </summary>
        private dbVerbindung verbindung;
        /// <summary>
        /// Anfang des Jahres
        /// Immer 1. Jänner des aktuellen Jahres
        /// </summary>
        private DateTime AnfangJahr;
        /// <summary>
        /// Ende des Jahres
        /// Immer der 31. Dezember des aktuellen Jahres
        /// </summary>
        private DateTime EndeJahr;
        /// <summary>
        /// Fenster wird optimal dargestellt
        /// Verbindung wird aufgebaut
        /// Anfang und Ende des Jahres werden ermittelt
        /// </summary>
        /// <param name="datenbank"></param>
        public frmmain(dbVerbindung datenbank)
        {
            this.verbindung = datenbank;
            // Frist wird gesetzt auf das aktuelle Jahr
            AnfangJahr = new DateTime(DateTime.Now.Year, 1, 1);
            EndeJahr = new DateTime(DateTime.Now.Year, 12, 31);

            InitializeComponent();

            #region Fenstergröße optimalisieren und Elemente anpassen
            // Mainfenster
            this.Location = new Point(0, 0);
            this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
            this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;

            // Anmelde Groupbox
            this.groupBox1.Location = new Point(10,30);
            this.groupBox1.Width = (this.Width - 50) / 2;
            this.groupBox1.Height = this.Height - 100;
            this.dgvAnmeldeliste.Location = new Point(20, 30);
            this.dgvAnmeldeliste.Width = this.groupBox1.Width - 40;
            this.dgvAnmeldeliste.Height = this.groupBox1.Height - this.groupBox1.Height/4;
            this.btnSpielerAnmelden.Location = new Point(this.dgvAnmeldeliste.Left, this.dgvAnmeldeliste.Top + this.dgvAnmeldeliste.Height + 5);
            this.btnSpielerAnmelden.Width = this.dgvAnmeldeliste.Width / 2 - 10;
            this.btnSpielerAnmelden.Height = (this.groupBox1.Height - this.dgvAnmeldeliste.Height) / 2 -25;
            this.btnNeuerSpieler.Location = new Point(this.btnSpielerAnmelden.Left, this.btnSpielerAnmelden.Top + this.btnSpielerAnmelden.Height + 5);
            this.btnNeuerSpieler.Width = this.dgvAnmeldeliste.Width / 2 - 10;
            this.btnNeuerSpieler.Height = (this.groupBox1.Height - this.dgvAnmeldeliste.Height) / 2 - 25;
            this.btnAktualisieren.Location = new Point(this.btnSpielerAnmelden.Left + this.btnSpielerAnmelden.Width + 10, this.dgvAnmeldeliste.Top + this.dgvAnmeldeliste.Height + 5);
            this.btnAktualisieren.Width = this.dgvAnmeldeliste.Width / 2 - 10;
            this.btnAktualisieren.Height = (this.groupBox1.Height - this.dgvAnmeldeliste.Height) / 2 - 25;
            this.btnOffeneTouren.Location=new Point(this.btnSpielerAnmelden.Left+this.btnSpielerAnmelden.Width+10,this.btnSpielerAnmelden.Top + this.btnSpielerAnmelden.Height + 5);
            this.btnOffeneTouren.Width = this.dgvAnmeldeliste.Width / 2 - 10;
            this.btnOffeneTouren.Height = (this.groupBox1.Height - this.dgvAnmeldeliste.Height) / 2 - 25;

            // Ranglisten
            this.tbcRanglisten.Location = new Point(this.groupBox1.Width+20,this.groupBox1.Top);
            this.tbcRanglisten.Width = (this.Width - 50) / 2;
            this.tbcRanglisten.Height = this.Height - 100;

            this.dataGridView1.Location = new Point( 5,  5);
            this.dataGridView1.Width = this.tbcRanglisten.Width - 20;
            this.dataGridView1.Height = this.tbcRanglisten.Height - 100;
            this.btnRanglisteAktualisieren.Location = new Point(this.dataGridView1.Left, this.dataGridView1.Top + this.dataGridView1.Height + 10);

            this.dgvTagessieger.Location = new Point(5, 5);
            this.dgvTagessieger.Width = this.tbcRanglisten.Width - 20;
            this.dgvTagessieger.Height = this.tbcRanglisten.Height - 100;
            this.dtpAktuellerTag.Location = new Point(this.dgvTagessieger.Left, this.dgvTagessieger.Top + this.dgvTagessieger.Height + 10);
            this.btnTagessiegeraktualisieren.Location = new Point(this.dtpAktuellerTag.Left+this.dtpAktuellerTag.Width+10, this.dgvTagessieger.Top + this.dgvTagessieger.Height + 10);

            this.dgvTourensieger.Location = new Point(5, 5);
            this.dgvTourensieger.Width = this.tbcRanglisten.Width - 20;
            this.dgvTourensieger.Height = this.tbcRanglisten.Height - 100;
            this.btnTourensiegerAktualisieren.Location = new Point(this.dgvTourensieger.Left, this.dgvTourensieger.Top + this.dgvTourensieger.Height + 10);

            this.dgvAlleSpieler.Location = new Point(5, 5);
            this.dgvAlleSpieler.Width = this.tbcRanglisten.Width - 20;
            this.dgvAlleSpieler.Height = this.tbcRanglisten.Height - 100;
            this.btnAlleSpielerAnzeigen.Location = new Point(this.dgvAlleSpieler.Left, this.dgvAlleSpieler.Top + this.dgvAlleSpieler.Height + 10);
            this.lblAnzahlSpieler.Location = new Point(this.btnAlleSpielerAnzeigen.Left + this.btnAlleSpielerAnzeigen.Width + 10, this.dgvAlleSpieler.Top + this.dgvAlleSpieler.Height + 10);
            this.cbxAuswahlJahrAlleSpieler.Location = new Point(this.lblAnzahlSpieler.Left, this.lblAnzahlSpieler.Top + this.lblAnzahlSpieler.Height + 2);
            
            this.dgvSchussfolgen.Location = new Point(5, this.tbcRanglisten.Height/2);
            this.dgvSchussfolgen.Width = this.tbcRanglisten.Width - 20;
            this.dgvSchussfolgen.Height = this.tbcRanglisten.Height - this.tbcRanglisten.Height/2-30;
            this.tbxnachnameeingabe.Left = 5;
            this.tbxnachnameeingabe.Width = this.dgvSchussfolgen.Width / 2 - 10;
            this.dgvauswahlspieler.Left = this.tbxnachnameeingabe.Left + this.tbxnachnameeingabe.Width + 5;
            this.dgvauswahlspieler.Width = this.dgvSchussfolgen.Width / 2 - 10;
            this.lineShape1.X1 = this.dgvSchussfolgen.Left;
            this.lineShape1.Y1 = this.dgvauswahlspieler.Top + this.dgvauswahlspieler.Height + 5;
            this.lineShape1.X2 = this.dgvauswahlspieler.Left + this.dgvauswahlspieler.Width;
            this.lineShape1.Y2 = this.dgvauswahlspieler.Top + this.dgvauswahlspieler.Height + 5;
            this.lbl1.Left = this.dgvSchussfolgen.Left;
            this.lbl1.Top = this.lineShape1.Y1 + 5;
            this.lblnachname.Left = this.dgvSchussfolgen.Left;
            this.lblnachname.Top = this.lbl1.Top + this.lbl1.Height + 2;
            this.lbl2.Left = this.dgvSchussfolgen.Left;
            this.lbl2.Top = this.lblnachname.Top + this.lblnachname.Height + 5;
            this.lbladresse.Left = this.dgvSchussfolgen.Left;
            this.lbladresse.Top = this.lbl2.Top + this.lbl2.Height + 2;
            this.lbl3.Left = this.dgvSchussfolgen.Left;
            this.lbl3.Top = this.lbladresse.Top + this.lbladresse.Height + 20;
            this.lblsonstiges.Left = this.dgvSchussfolgen.Left;
            this.lblsonstiges.Top = this.lbl3.Top + this.lbl3.Height + 2;
            this.lbl4.Left = this.dgvSchussfolgen.Left;
            this.lbl4.Top = this.dgvSchussfolgen.Top - 5 - this.lbl4.Height;
            this.lbl5.Left = this.dgvSchussfolgen.Left+this.dgvSchussfolgen.Width/2;
            this.lbl5.Top = this.lineShape1.Y1 + 5;
            this.lblvereine.Left = this.dgvSchussfolgen.Left + this.dgvSchussfolgen.Width / 2;
            this.lblvereine.Top = this.lbl5.Top + this.lbl5.Height + 2;
            #endregion
        }
        /// <summary>
        /// Anzeige wird aktualisiert
        /// </summary>
        private void frmmain_Activated(object sender, EventArgs e)
        {
            this.AnzeigeAktualisieren();
        }

        #region TextBoxen
        /// <summary>
        /// Spieler wird in der Datenbank gesucht und in einem DatagridView angezeigt
        /// </summary>
        private void tbxnachnameeingabe_TextChanged(object sender, EventArgs e)
        {
            this.dgvauswahlspieler.DataSource = verbindung.SpielerSucheFamilienname(this.tbxnachnameeingabe.Text, "");
        }

        #endregion

        #region DataGridViews
        /// <summary>
        /// Es wird die Anzahl der Touren eines Spielers in einem neuen Fenster angezeigt.
        /// </summary>
        private void dgvTourensieger_DoubleClick(object sender, EventArgs e)
        {
            if (this.dgvTourensieger.CurrentCellAddress.Y > -1)
            {
                if (this.dgvTourensieger.Rows[this.dgvTourensieger.CurrentCellAddress.Y].Cells[0].Value.ToString() == "")
                {
                    MessageBox.Show("Sie haben keinen Spieler ausgewählt!");
                }
                else
                {
                    MessageBox.Show(this.dgvTourensieger.Rows[this.dgvTourensieger.CurrentCellAddress.Y].Cells[0].Value.ToString() + " " + this.dgvTourensieger.Rows[this.dgvTourensieger.CurrentCellAddress.Y].Cells[1].Value.ToString() + "\nAnzahl der Touren: " + this.dgvTourensieger.Rows[this.dgvTourensieger.CurrentCellAddress.Y].Cells[2].Value.ToString(), "Anzahl Touren");
                }
            }
        }
        /// <summary>
        /// Alle Daten des ausgewählten Spielers werden dem User angezeigt
        /// </summary>
        private void dgvauswahlspieler_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.dgvauswahlspieler.Rows[this.dgvauswahlspieler.CurrentCellAddress.Y].Cells[0].Value.ToString() == "")
            {
                MessageBox.Show("Sie haben keinen Spieler ausgewählt!");
            }
            else
            {
                int id = Convert.ToInt32(this.dgvauswahlspieler.Rows[this.dgvauswahlspieler.CurrentCellAddress.Y].Cells[0].Value);
                lblnachname.Text = verbindung.name(id);
                lbladresse.Text = verbindung.adresse(id);
                lblsonstiges.Text = verbindung.Sonstiges(id);
                lblvereine.Text = verbindung.VereineVonEinerID(id).ToString();
                dgvSchussfolgen.DataSource = verbindung.AlleSchussfolgenVonEinerID(id);
                dgvSchussfolgen.Columns[6].Visible = false;
            }
        }
        /// <summary>
        /// Falls der Spieler noch 0 bezahlte Touren hat, dann wird der User aufgerufen ob er den Spieler
        /// abmelden will oder nicht.
        /// Falls nicht dann erscheint ein Fenster, in dem man die Anzahl der bezahlten Touren eingeben kann.
        /// </summary>
        private void dgvAnmeldeliste_DoubleClick(object sender, EventArgs e)
        {
            if (this.dgvAnmeldeliste.CurrentCellAddress.Y > -1)
            {
                if (this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[0].Value.ToString() == "")
                {
                    MessageBox.Show("Sie haben keinen Spieler ausgewählt!");
                }
                else
                {
                    int id_gewählt = 0;
                    id_gewählt=Convert.ToInt32(this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[0].Value);
                    if (Convert.ToInt32(this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[3].Value )== 0)
                    {
                        DialogResult MsgBox = MessageBox.Show("Wollen Sie den Spieler abmelden???", "Abmeldung", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        switch (MsgBox)
                        {
                            case DialogResult.Yes:
                                verbindung.SpielerAbmelden(id_gewählt);
                                AnzeigeAktualisieren();
                                break;
                            case DialogResult.No:
                                frmTourenEingabe dialog = new frmTourenEingabe(this.verbindung,
                            this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[1].Value.ToString(),
                            this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[2].Value.ToString(),
                            Convert.ToString(id_gewählt)
                            );
                                dialog.ShowDialog();
                                break;
                            default:
                                break;
                        }
                    }
                    else
                    {
                        frmTourenEingabe dialog = new frmTourenEingabe(this.verbindung,
                            this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[1].Value.ToString(),
                            this.dgvAnmeldeliste.Rows[this.dgvAnmeldeliste.CurrentCellAddress.Y].Cells[2].Value.ToString(),
                            Convert.ToString(id_gewählt)
                            );
                        dialog.ShowDialog();
                    }
                }
            }
        }

        #endregion

        #region Buttons
        /// <summary>
        /// Es wird der Tourensieger ermittelt
        /// </summary>
        private void btnTourensiegerAktualisieren_Click(object sender, EventArgs e)
        {
            this.dgvTourensieger.DataSource = verbindung.Tourensieger(AnfangJahr, EndeJahr);
            this.dgvTourensieger.Columns[2].Visible = false;
            dgvTourensieger.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTourensieger.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
        }
        /// <summary>
        /// Es wird der Tagessieger ermittelt und angezeigt
        /// </summary>
        private void btnTagessiegeraktualisieren_Click(object sender, EventArgs e)
        {
            dgvTagessieger.Columns.Clear();
            Rangliste rang = new Rangliste(verbindung, dtpAktuellerTag.Value, dtpAktuellerTag.Value + new TimeSpan(1, 0, 0, 0));
            int[] personen = this.verbindung.alleIDsProTag(dtpAktuellerTag.Value, dtpAktuellerTag.Value + new TimeSpan(1, 0, 0, 0));

            dgvTagessieger.DataSource = rang.Tabelle(personen);
            // Data Grid Viewn formatieren
            dgvTagessieger.Columns["id"].Visible = false;

            dgvTagessieger.Columns.Add("Rang", "Rang");

            int index = dgvTagessieger.Columns.GetLastColumn(DataGridViewElementStates.Visible,
                                                            DataGridViewElementStates.None).DisplayIndex;

            dgvTagessieger.Columns[index].DisplayIndex = 0;
            dgvTagessieger.Columns["name"].DisplayIndex = 1;

            for (int i = 0; i < personen.GetLength(0); i++)
            {
                dgvTagessieger.Rows[i].Cells["Rang"].Value = (i + 1).ToString();
            }

            dgvTagessieger.Columns["Rang"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["Rang"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["name"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["36"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["36"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["37"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["37"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["38"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["38"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["39"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["39"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["40"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["40"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["41"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["41"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["42"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["42"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["43"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["43"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["44"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["44"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["45"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["45"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["46"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["46"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["47"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["47"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["48"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["48"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["49"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["49"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvTagessieger.Columns["50"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dgvTagessieger.Columns["50"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
        }
        /// <summary>
        /// Es werden entweder alle Spieler angezeigt oder nur jene, welche in der ComboBox ausgewählt wurden.
        /// </summary>
        private void btnAlleSpielerAnzeigen_Click(object sender, EventArgs e)
        {
            switch (cbxAuswahlJahrAlleSpieler.SelectedIndex)
            {
                // Alle SPieler die in der Datenbank vorhanden sind
                case 0:
                    this.dgvAlleSpieler.DataSource = verbindung.SpielerSucheFamilienname("", "");
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    dgvAlleSpieler.Columns["id"].Visible = false;
                    break;
                // Alle SPieler die im Jahr 2009 geschossen haben
                case 1:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2009);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                // Alle SPieler die im Jahr 2010 geschossen haben
                case 2:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2010);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                // Alle SPieler die im Jahr 2011 geschossen haben
                case 3:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2011);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 4:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2012);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 5:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2013);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 6:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2014);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 7:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2015);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 8:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2016);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 9:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2017);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 10:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2018);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 11:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2019);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                case 12:
                    this.dgvAlleSpieler.DataSource = verbindung.AlleSpielerEinesJahrgangs(2020);
                    lblAnzahlSpieler.Text = "Anzahl Spieler: " + Convert.ToString(dgvAlleSpieler.RowCount);
                    break;
                default:
                    lblAnzahlSpieler.Text = "Bitte wählen Sie ein Jahr aus! ==>";
                    break;
            }
        }
        /// <summary>
        /// Es wird die Rangliste aktualisiert
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Columns.Clear();
            Rangliste rang = new Rangliste(verbindung, AnfangJahr, EndeJahr);
            int[] personen = this.verbindung.alleIDsProTag( AnfangJahr, EndeJahr);

            dataGridView1.DataSource = rang.Tabelle(personen);
            // Data Grid Viewn formatieren
            dataGridView1.Columns["id"].Visible = false;

            dataGridView1.Columns.Add("Rang", "Rang");

            int index = dataGridView1.Columns.GetLastColumn(DataGridViewElementStates.Visible,
                                                            DataGridViewElementStates.None).DisplayIndex;

            dataGridView1.Columns[index].DisplayIndex = 0;
            dataGridView1.Columns["name"].DisplayIndex = 1;

            for (int i = 0; i < personen.GetLength(0); i++)
            {
                dataGridView1.Rows[i].Cells["Rang"].Value = (i + 1).ToString();
            }

            dataGridView1.Columns["Rang"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["Rang"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["name"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["36"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["36"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["37"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["37"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["38"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["38"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["39"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["39"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["40"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["40"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["41"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["41"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["42"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["42"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["43"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["43"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["44"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["44"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["45"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["45"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["46"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["46"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["47"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["47"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["48"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["48"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["49"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["49"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns["50"].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns["50"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
        }
        /// <summary>
        /// Es werden nur jene Spieler angezeigt, welche mit den Touren im 
        /// minus sind und sie werden rot gefärbt.
        /// </summary>
        private void btnOffeneTouren_Click(object sender, EventArgs e)
        {
            this.dgvAnmeldeliste.DataSource = verbindung.SpielerMitNegativenTouren();

            // Färben der Zellen wenn der Spieler noch Touren zu zahlen hat
            for (int i = 0; i < this.dgvAnmeldeliste.Rows.Count; i++)
            {
                if (Convert.ToInt32(this.dgvAnmeldeliste.Rows[i].Cells[3].Value) < 0)
                {
                    this.dgvAnmeldeliste.Rows[i].DefaultCellStyle.BackColor = Color.Red;
                }
            }
            this.dgvAnmeldeliste.Columns[0].Visible = false;
        }
        /// <summary>
        /// Es wird ein neuer Spieler in der Datenbank angelegt.
        /// </summary>
        private void btnNeuerSpieler_Click(object sender, EventArgs e)
        {
            frmpersonanlegen dialog = new frmpersonanlegen(this.verbindung);
            dialog.ShowDialog();
        }
        /// <summary>
        /// Es wird ein Spieler der Anmeldeliste hinzugefügt.
        /// Der Spieler wird in einem Suchfenster ausgewählt.
        /// </summary>
        private void btnSpielerAnmelden_Click(object sender, EventArgs e)
        {
            frmSpielerSuche dialog = new frmSpielerSuche(this.verbindung);
            dialog.ShowDialog();
        }
        /// <summary>
        /// Anmeldeliste Anzeige wird aktualisiert
        /// </summary>
        private void btnAktualisieren_Click(object sender, EventArgs e)
        {
            this.AnzeigeAktualisieren();
        }

        #endregion

        #region Methoden
        /// <summary>
        /// Es werden alle Spieler angezeigt, welche im System angemeldet sind. Alljene die 
        /// negative Touren aufweisen werden rot hinterlegt.
        /// </summary>
        private void AnzeigeAktualisieren()
        {
            this.dgvAnmeldeliste.DataSource = verbindung.SpielerMitOffenenTouren();
            // Färben der Zellen wenn der Spieler noch Touren zu zahlen hat
            for (int i = 0; i < this.dgvAnmeldeliste.Rows.Count; i++)
            {
                if (Convert.ToInt32(this.dgvAnmeldeliste.Rows[i].Cells[3].Value) < 0)
                {
                    this.dgvAnmeldeliste.Rows[i].DefaultCellStyle.BackColor = Color.Red;
                }
            }
            this.dgvAnmeldeliste.Columns[0].Visible = false;
        }

        #endregion

        #region ToolStripItems

        /// <summary>
        /// Fenster wird geschlossen
        /// </summary>
        private void fensterSchließenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        /// <summary>
        /// Rangliste wird aktualisiert und die Daten werden in eine CSV Datei abgespeichert.
        /// </summary>
        private void ranglisteExportierenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlgSaveFile = new SaveFileDialog();
            dlgSaveFile.CreatePrompt = true;
            dlgSaveFile.OverwritePrompt = true;
            dlgSaveFile.Filter = "CSV-Dateien (*.csv)|*.csv";
            if (dlgSaveFile.ShowDialog() == DialogResult.OK)
            {
                dataGridView1.Columns.Clear();
                Rangliste rang = new Rangliste(verbindung, AnfangJahr, EndeJahr);
                int[] personen = this.verbindung.alleIDsProTag(AnfangJahr, EndeJahr);

                dataGridView1.DataSource = rang.Tabelle(personen);
                // Data Grid Viewn formatieren
                dataGridView1.Columns["id"].Visible = false;

                dataGridView1.Columns.Add("Rang", "Rang");

                int index = dataGridView1.Columns.GetLastColumn(DataGridViewElementStates.Visible,
                                                                DataGridViewElementStates.None).DisplayIndex;

                dataGridView1.Columns[index].DisplayIndex = 0;
                dataGridView1.Columns["name"].DisplayIndex = 1;

                for (int i = 0; i < personen.GetLength(0); i++)
                {
                    dataGridView1.Rows[i].Cells["Rang"].Value = (i + 1).ToString();
                }

                dataGridView1.Columns["Rang"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["Rang"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["name"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["36"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["36"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["37"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["37"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["38"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["38"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["39"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["39"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["40"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["40"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["41"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["41"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["42"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["42"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["43"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["43"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["44"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["44"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["45"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["45"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["46"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["46"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["47"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["47"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["48"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["48"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["49"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["49"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns["50"].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns["50"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

                StreamWriter ranglisteDatei = new StreamWriter(dlgSaveFile.FileName, false);
                string zeile = string.Empty;
                zeile = "Rang;Name;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;";
                ranglisteDatei.WriteLine(zeile);
                zeile = "";
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    // Count -1 weil der Rang mit dem Programm am Anfang der Liste hingeschrieben wird
                    for (int j = 0; j < dataGridView1.Columns.Count - 1; j++)
                    {
                        if (j == 0)
                        {
                            zeile = Convert.ToString(i+1) + ";";
                        }
                        else
                        {
                            zeile += dataGridView1.Rows[i].Cells[j].Value + ";";
                        }
                    }
                    ranglisteDatei.WriteLine(zeile);
                    zeile = "";
                    if ( (i+1) % 15 == 0)
                    {
                        zeile = "Rang;Name;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;";
                        ranglisteDatei.WriteLine(zeile);
                        zeile = "";
                    }

                }
                ranglisteDatei.Close();
            }
        }
        /// <summary>
        /// Es wird das Fenster zum Spieler ändern aufgerufen und das Passwort abgefragt
        /// Es darf nur jemand mit Administratorrechten (Bereich = 3) Daten ändern.
        /// </summary>
        private void spielerdatenÄndernToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Password pwForm = new Password(this.verbindung);
            pwForm.ShowDialog();

            if (pwForm.PasswordOk && (pwForm.Bereich == 3))
            {
                frmSpielerAendern dialog = new frmSpielerAendern(this.verbindung);
                dialog.ShowDialog();
            }
            else
            {
                MessageBox.Show("Sie haben keine ausreichenden Rechte für diese Funktion", "Zugriff Verweigert");
            }
        }
        /// <summary>
        /// Es wird das Fenster zur Schussverteilung aufgerufen.
        /// </summary>
        private void kostenrechnungToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmKosten dialog = new frmKosten(this.verbindung);
            dialog.ShowDialog();
        }
        #endregion
    }
}
